﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;

namespace BLL
{
    public class Thongke2BUO
    {
        CSDLBanHangDataContext context = new CSDLBanHangDataContext();

        /// <summary>
        /// Thống kê hàng bán chạy
        /// </summary>
        /// <param name="tungay"></param>
        /// <param name="denngay"></param>
        /// <returns></returns>
        public IQueryable HienThiHangBanChay(DateTime tungay, DateTime denngay)
        {
            var list = context.tbl_HoaDonNhaps.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_HoaDonNhap,
                    b => b.id_HoaDonNhap,
                    (a, b) => new
                    {
                        id_HoaDonNhap = a.id_HoaDonNhap,
                        id_Hang = b.id_Hang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(z => z.id_Hang).Select(gr1 => new
                {
                    id_Hang = gr1.Key,
                    TongSPNhap = gr1.Sum(zz => zz.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        TongSPNhap = c.TongSPNhap,
                        SoLuong = d.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr2 => new
                {
                    id_Hang = gr2.Key,
                    TongSPBan = gr2.Sum(xx => xx.SoLuong),
                    TongSPNhap = gr2.Sum(xxx => xxx.TongSPNhap)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    g => g.id_Hang,
                    h => h.id_Hang,
                    (g, h) => new
                    {
                        id_Hang = g.id_Hang,
                        TongSPNhap = g.TongSPNhap,
                        TongSPBan = g.TongSPBan,
                        id_HoaDonBan = h.id_HoaDonBan
                    }
                ).Join(
                    context.tbl_HoaDonBans,
                    i => i.id_HoaDonBan,
                    j => j.id_HoaDonBan,
                    (i, j) => new
                    {
                        id_Hang = i.id_Hang,
                        TongSPNhap = i.TongSPNhap,
                        TongSPBan = i.TongSPBan,
                        id_HoaDonBan = i.id_HoaDonBan,
                        NgayBan = j.NgayBan
                    }
                ).Join(
                    context.tbl_HoaDonNhap_Hangs,
                    k => k.id_Hang,
                    l => l.id_Hang,
                    (k, l) => new
                    {
                        id_Hang = k.id_Hang,
                        TongSPNhap = k.TongSPNhap,
                        TongSPBan = k.TongSPBan,
                        id_HoaDonBan = k.id_HoaDonBan,
                        NgayBan = k.NgayBan,
                        id_HoaDonNhap = l.id_HoaDonNhap
                    }
                ).Join(
                    context.tbl_HoaDonNhaps,
                    f => f.id_HoaDonNhap,
                    o => o.id_HoaDonNhap,
                    (f, o) => new
                    {
                        id_Hang = f.id_Hang,
                        TongSPNhap = f.TongSPNhap,
                        TongSPBan = f.TongSPBan,
                        id_HoaDonBan = f.id_HoaDonBan,
                        NgayBan = f.NgayBan,
                        id_HoaDonNhap = f.id_HoaDonNhap,
                        NgayNhap = o.NgayNhap
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    q => q.id_Hang,
                    w => w.id_Hang,
                    (q, w) => new
                    {
                        id_Hang = q.id_Hang,
                        TongSPNhap = q.TongSPNhap,
                        TongSPBan = q.TongSPBan,
                        id_HoaDonBan = q.id_HoaDonBan,
                        NgayBan = q.NgayBan,
                        id_HoaDonNhap = q.id_HoaDonNhap,
                        NgayNhap = q.NgayNhap,
                        id_NhaCungCap = w.id_NhaCungCap
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    r => r.id_NhaCungCap,
                    t => t.id_NhaCungCap,
                    (r, t) => new
                    {
                        id_Hang = r.id_Hang,
                        TongSPNhap = r.TongSPNhap,
                        TongSPBan = r.TongSPBan,
                        id_HoaDonBan = r.id_HoaDonBan,
                        NgayBan = r.NgayBan,
                        id_HoaDonNhap = r.id_HoaDonNhap,
                        NgayNhap = r.NgayNhap,
                        id_NhaCungCap = r.id_NhaCungCap,
                        TenNhaCungCap = t.TenNhaCungCap
                    }
                ).Join(
                    context.tbl_Hangs,
                    y => y.id_Hang,
                    yy => yy.id_Hang,
                    (y, yy) => new 
                    {
                        id_Hang = y.id_Hang,
                        TongSPNhap = y.TongSPNhap,
                        TongSPBan = y.TongSPBan,
                        id_HoaDonBan = y.id_HoaDonBan,
                        NgayBan = y.NgayBan,
                        id_HoaDonNhap = y.id_HoaDonNhap,
                        NgayNhap = y.NgayNhap,
                        id_NhaCungCap = y.id_NhaCungCap,
                        TenNhaCungCap = y.TenNhaCungCap,
                        TenHang = yy.TenHang
                    }
                ).Where(p => (DateTime.Compare((DateTime)p.NgayBan, tungay) >= 0) && (DateTime.Compare((DateTime)p.NgayBan, denngay) <= 0)).Distinct().OrderByDescending(u => u.TongSPBan).Take(10); 

            return list;
        }

        /// <summary>
        /// Thống kê hàng bán không chạy
        /// </summary>
        /// <param name="tungay"></param>
        /// <param name="denngay"></param>
        /// <returns></returns>
        public IQueryable HienThiHangBanKhongChay(DateTime tungay, DateTime denngay)
        {
            var list = context.tbl_HoaDonNhaps.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_HoaDonNhap,
                    b => b.id_HoaDonNhap,
                    (a, b) => new
                    {
                        id_HoaDonNhap = a.id_HoaDonNhap,
                        id_Hang = b.id_Hang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(z => z.id_Hang).Select(gr1 => new
                {
                    id_Hang = gr1.Key,
                    TongSPNhap = gr1.Sum(zz => zz.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        TongSPNhap = c.TongSPNhap,
                        SoLuong = d.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr2 => new
                {
                    id_Hang = gr2.Key,
                    TongSPBan = gr2.Sum(xx => xx.SoLuong),
                    TongSPNhap = gr2.Sum(xxx => xxx.TongSPNhap)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    g => g.id_Hang,
                    h => h.id_Hang,
                    (g, h) => new
                    {
                        id_Hang = g.id_Hang,
                        TongSPNhap = g.TongSPNhap,
                        TongSPBan = g.TongSPBan,
                        id_HoaDonBan = h.id_HoaDonBan
                    }
                ).Join(
                    context.tbl_HoaDonBans,
                    i => i.id_HoaDonBan,
                    j => j.id_HoaDonBan,
                    (i, j) => new
                    {
                        id_Hang = i.id_Hang,
                        TongSPNhap = i.TongSPNhap,
                        TongSPBan = i.TongSPBan,
                        id_HoaDonBan = i.id_HoaDonBan,
                        NgayBan = j.NgayBan
                    }
                ).Join(
                    context.tbl_HoaDonNhap_Hangs,
                    k => k.id_Hang,
                    l => l.id_Hang,
                    (k, l) => new
                    {
                        id_Hang = k.id_Hang,
                        TongSPNhap = k.TongSPNhap,
                        TongSPBan = k.TongSPBan,
                        id_HoaDonBan = k.id_HoaDonBan,
                        NgayBan = k.NgayBan,
                        id_HoaDonNhap = l.id_HoaDonNhap
                    }
                ).Join(
                    context.tbl_HoaDonNhaps,
                    f => f.id_HoaDonNhap,
                    o => o.id_HoaDonNhap,
                    (f, o) => new
                    {
                        id_Hang = f.id_Hang,
                        TongSPNhap = f.TongSPNhap,
                        TongSPBan = f.TongSPBan,
                        id_HoaDonBan = f.id_HoaDonBan,
                        NgayBan = f.NgayBan,
                        id_HoaDonNhap = f.id_HoaDonNhap,
                        NgayNhap = o.NgayNhap
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    q => q.id_Hang,
                    w => w.id_Hang,
                    (q, w) => new
                    {
                        id_Hang = q.id_Hang,
                        TongSPNhap = q.TongSPNhap,
                        TongSPBan = q.TongSPBan,
                        id_HoaDonBan = q.id_HoaDonBan,
                        NgayBan = q.NgayBan,
                        id_HoaDonNhap = q.id_HoaDonNhap,
                        NgayNhap = q.NgayNhap,
                        id_NhaCungCap = w.id_NhaCungCap
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    r => r.id_NhaCungCap,
                    t => t.id_NhaCungCap,
                    (r, t) => new
                    {
                        id_Hang = r.id_Hang,
                        TongSPNhap = r.TongSPNhap,
                        TongSPBan = r.TongSPBan,
                        id_HoaDonBan = r.id_HoaDonBan,
                        NgayBan = r.NgayBan,
                        id_HoaDonNhap = r.id_HoaDonNhap,
                        NgayNhap = r.NgayNhap,
                        id_NhaCungCap = r.id_NhaCungCap,
                        TenNhaCungCap = t.TenNhaCungCap
                    }
                ).Join(
                    context.tbl_Hangs,
                    y => y.id_Hang,
                    yy => yy.id_Hang,
                    (y, yy) => new
                    {
                        id_Hang = y.id_Hang,
                        TongSPNhap = y.TongSPNhap,
                        TongSPBan = y.TongSPBan,
                        id_HoaDonBan = y.id_HoaDonBan,
                        NgayBan = y.NgayBan,
                        id_HoaDonNhap = y.id_HoaDonNhap,
                        NgayNhap = y.NgayNhap,
                        id_NhaCungCap = y.id_NhaCungCap,
                        TenNhaCungCap = y.TenNhaCungCap,
                        TenHang = yy.TenHang
                    }
                ).Where(p => (DateTime.Compare((DateTime)p.NgayBan, tungay) >= 0) && (DateTime.Compare((DateTime)p.NgayBan, denngay) <= 0)).Distinct().OrderBy(u => u.TongSPBan).Take(10);

            return list;
        }

        public IQueryable HienThiKHQuenThuoc(DateTime tungay, DateTime denngay)
        {
            var list = context.tbl_HoaDonBans.GroupBy(z => z.id_Khach).Select(gr1 => new
            {
                id_Khach = gr1.Key,
                SoLanMua = gr1.Count()
            }).Join(
                context.tbl_HoaDonBans,
                a => a.id_Khach,
                b => b.id_Khach,
                (a, b) => new
                {
                    id_HoaDonBan = b.id_HoaDonBan,
                    id_Khach = b.id_Khach,
                    SoLanMua = a.SoLanMua
                }
            ).Join(
                context.tbl_HoaDonBan_Hangs,
                c => c.id_HoaDonBan,
                d => d.id_HoaDonBan,
                (c, d) => new
                {
                    id_HoaDonBan = c.id_HoaDonBan,
                    id_Khach = c.id_Khach,
                    SoLanMua = c.SoLanMua,
                    SoLuong = d.SoLuong
                }
            ).GroupBy(x => x.id_Khach).Select(gr2 => new
                {
                    id_Khach = gr2.Key,
                    SoLuongMua = gr2.Sum(xx => xx.SoLuong),
                    SoLanMua = gr2.Average(xxx => xxx.SoLanMua)
                }
            ).Join(
                context.tbl_Khaches,
                g => g.id_Khach,
                h => h.id_Khach,
                (g, h) => new
                {
                    id_Khach = g.id_Khach,
                    SoLuongMua = g.SoLuongMua,
                    SoLanMua = g.SoLanMua,
                    TenKhach = h.TenKhach,
                    SoDienThoai = h.SoDienThoai
                }
            ).Join(
                context.tbl_HoaDonBans,
                i => i.id_Khach,
                j => j.id_Khach,
                (i, j) => new 
                {
                    id_Khach = i.id_Khach,
                    SoLuongMua = i.SoLuongMua,
                    SoLanMua = i.SoLanMua,
                    TenKhach = i.TenKhach,
                    SoDienThoai = i.SoDienThoai,
                    NgayBan = j.NgayBan
                }
            ).Where(p => (DateTime.Compare((DateTime)p.NgayBan, tungay) >= 0) && (DateTime.Compare((DateTime)p.NgayBan, denngay) <= 0)).Distinct().OrderByDescending(u => u.SoLanMua).Take(10);

            return list;
        }

        /// <summary>
        /// Hien thi ton kho
        /// </summary>
        /// <returns></returns>
        public IQueryable HienThiHangTonKho()
        {

            var list = context.tbl_Hangs.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_Hang,
                    b => b.id_Hang,
                    (a, b) => new
                    {
                        id_Hang = a.id_Hang,
                        id_HoaDonNhap = b.id_HoaDonNhap,
                        TenHang = a.TenHang,
                        SoLuongNhap = b.SoLuong
                    }
                ).Join(
                    context.tbl_HoaDonNhaps,
                    c => c.id_HoaDonNhap,
                    d => d.id_HoaDonNhap,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        id_HoaDonNhap = c.id_HoaDonNhap,
                        TenHang = c.TenHang,
                        SoLuongNhap = c.SoLuongNhap,
                        NgayNhap = d.NgayNhap
                    }
                )
            .Join(
                    context.tbl_HoaDonBan_Hangs,
                    f => f.id_Hang,
                    g => g.id_Hang,
                    (f, g) => new
                    {
                        id_Hang = f.id_Hang,
                        id_HoaDonNhap = f.id_HoaDonNhap,
                        id_HoaDonBan = g.id_HoaDonBan,
                        TenHang = f.TenHang,
                        SoLuongNhap = f.SoLuongNhap,
                        SoLuongBan = g.SoLuong,
                        NgayNhap = f.NgayNhap
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    h => h.id_Hang,
                    k => k.id_Hang,
                    (h, k) => new
                    {
                        id_Hang = h.id_Hang,
                        id_HoaDonNhap = h.id_HoaDonNhap,
                        id_HoaDonBan = h.id_HoaDonBan,
                        id_NhaCungCap = k.id_NhaCungCap,
                        TenHang = h.TenHang,
                        SoLuongNhap = h.SoLuongNhap,
                        SoLuongBan = h.SoLuongBan,
                        NgayNhap = h.NgayNhap
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    m => m.id_NhaCungCap,
                    n => n.id_NhaCungCap,
                    (m, n) => new
                    {
                        id_Hang = m.id_Hang,
                        //id_HoaDonNhap = m.id_HoaDonNhap,
                        //id_HoaDonBan = m.id_HoaDonBan,
                        id_NhaCungCap = m.id_NhaCungCap,
                        TenHang = m.TenHang,
                        SoLuongNhap = m.SoLuongNhap,
                        SoLuongBan = m.SoLuongBan,
                        NgayNhap = m.NgayNhap,
                        TenNhaCungCap = n.TenNhaCungCap,
                        SoLuongTon = m.SoLuongNhap - m.SoLuongBan
                    }
                ).Distinct();//.Where(p => (DateTime.Now - (DateTime)p.NgayNhap).Days.Equals(150));

            var list1 = context.tbl_Hangs.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_Hang,
                    b => b.id_Hang,
                    (a, b) => new
                    {
                        id_Hang = a.id_Hang,
                        TenHang = a.TenHang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr1 => new
                    {
                        id_Hang = gr1.Key,
                        SoLuongNhap = gr1.Sum(xx => xx.SoLuong)
                    }
                ).Join(
                    context.tbl_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        TenHang = d.TenHang,
                        SoLuongNhap = c.SoLuongNhap
                    }
                ).Join(
                    context.tbl_HoaDonBan_Hangs,
                    f => f.id_Hang,
                    g => g.id_Hang,
                    (f, g) => new
                    {
                        id_Hang = f.id_Hang,
                        TenHang = f.TenHang,
                        SoLuongNhap = f.SoLuongNhap,
                        SoLuong = g.SoLuong
                    }
                ).GroupBy(z => z.id_Hang).Select(gr2 => new
                    {
                        id_Hang = gr2.Key,
                        SoLuongBan = gr2.Sum(xx => xx.SoLuong),
                        SoLuongNhap = gr2.Average(xxx => xxx.SoLuongNhap)
                    }
                ).Join(
                    context.tbl_Hangs,
                    h => h.id_Hang,
                    k => k.id_Hang,
                    (h, k) => new
                    {
                        id_Hang=h.id_Hang,
                        TenHang=k.TenHang,
                        SoLuongBan=h.SoLuongBan,
                        SoLuongNhap=h.SoLuongNhap,
                        SoLuongTon=h.SoLuongNhap-h.SoLuongBan
                    }
                );
            //hàng chưa bán được
            var list2 = context.tbl_Hangs.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_Hang,
                    b => b.id_Hang,
                    (a, b) => new
                    {
                        id_Hang = a.id_Hang,
                        TenHang = a.TenHang,
                        SoLuongBan = 0,
                        SoLuongNhap = b.SoLuong,
                        SoLuongTon = b.SoLuong
                    }
                );//.Where(n=> ! n.id_Hang.Contains(context.tbl_HoaDonBan_Hangs.Select(m=>m.id_Hang).ToString()))
                
                //;

            var list3 = context.tbl_Hangs.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_Hang,
                    b => b.id_Hang,
                    (a, b) => new
                    {
                        id_Hang = a.id_Hang,
                        TenHang = a.TenHang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr1 => new
                {
                    id_Hang = gr1.Key,
                    SoLuongNhap = gr1.Sum(xx => xx.SoLuong)
                }
                ).Join(
                    context.tbl_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        TenHang = d.TenHang,
                        SoLuongNhap = c.SoLuongNhap
                    }
                ).Where (p => !list1.Select(pp => pp.id_Hang).Contains(p.id_Hang)).Join(
                    context.tbl_HoaDonBan_Hangs,
                    f => f.id_Hang,
                    g => g.id_Hang,
                    (f, g) => new
                    {
                        id_Hang = f.id_Hang,
                        TenHang = f.TenHang,
                        SoLuongNhap = f.SoLuongNhap,
                        SoLuong = g.SoLuong
                    }
                ).GroupBy(z => z.id_Hang).Select(gr2 => new
                {
                    id_Hang = gr2.Key,
                    SoLuongBan = gr2.Sum(xx => xx.SoLuong),
                    SoLuongNhap = gr2.Average(xxx => xxx.SoLuongNhap)
                }
                ).Join(
                    context.tbl_Hangs,
                    h => h.id_Hang,
                    k => k.id_Hang,
                    (h, k) => new
                    {
                        id_Hang = h.id_Hang,
                        TenHang = k.TenHang,
                        SoLuongBan = h.SoLuongBan,
                        SoLuongNhap = h.SoLuongNhap,
                        SoLuongTon = h.SoLuongNhap - h.SoLuongBan
                    }
                );

            //var list4 = context.tbl_HoaDonNhap_Hangs.Join(
            //        context.tbl_Hangs,
            //        a => a.id_Hang,
            //        b => b.id_Hang,
            //        (a, b) => new
            //        {
            //            id_Hang = a.id_Hang,
            //            TenHang = b.TenHang,
            //            SoLuongBan = 0,
            //            SoLuongNhap = a.SoLuong,
            //            SoLuongTon = a.SoLuong
            //        }
            //    ).Where(p => !p.id_Hang.Contains(context.tbl_HoaDonBan_Hangs.Select(x => x.id_Hang)));
                //.Where (p => !list1.Select(pp => pp.id_Hang).Contains(p.id_Hang));
            return list;
        }
        /// <summary>
        /// Hhiển thị danh sách nhập kho của tất cả các nhà cung cấp
        /// </summary>
        /// <param name="tuNgay"></param>
        /// <param name="denNgay"></param>
        /// <returns></returns>
        public IQueryable HienThiNhapKhoAll(DateTime tuNgay, DateTime denNgay)
        {
            var list = context.tbl_Hangs.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_Hang,
                    b => b.id_Hang,
                    (a, b) => new
                    {
                        id_Hang = a.id_Hang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr1 => new
                    {
                        id_Hang = gr1.Key,
                        SoLuongNhap = gr1.Sum(xxx => xxx.SoLuong)
                    }
                ).Join(
                    context.tbl_HoaDonNhap_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        id_HoaDonNhap = d.id_HoaDonNhap,
                        SoLuongNhap = c.SoLuongNhap
                    }
                ).Join(
                    context.tbl_HoaDonNhaps,
                    f => f.id_HoaDonNhap,
                    g => g.id_HoaDonNhap,
                    (f, g) => new
                    {
                        id_Hang = f.id_Hang,
                        id_HoaDonNhap = f.id_HoaDonNhap,
                        SoLuongNhap = f.SoLuongNhap,
                        NgayNhap = g.NgayNhap
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    h => h.id_Hang,
                    k => k.id_Hang,
                    (h, k) => new
                    {
                        id_Hang = h.id_Hang,
                        id_HoaDonNhap = h.id_HoaDonNhap,
                        id_NhaCungCap = k.id_NhaCungCap,
                        SoLuongNhap = h.SoLuongNhap,
                        NgayNhap = h.NgayNhap
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    i => i.id_NhaCungCap,
                    j => j.id_NhaCungCap,
                    (i, j) => new
                    {
                        id_Hang = i.id_Hang,
                        id_HoaDonNhap = i.id_HoaDonNhap,
                        id_NhaCungCap = i.id_NhaCungCap,
                        SoLuongNhap = i.SoLuongNhap,
                        NgayNhap = i.NgayNhap,
                        TenNhaCungCap = j.TenNhaCungCap
                    }
                ).Join(
                    context.tbl_Hangs,
                    m => m.id_Hang,
                    n => n.id_Hang,
                    (m, n) => new
                    {
                        id_Hang = m.id_Hang,
                        //id_HoaDonNhap = m.id_HoaDonNhap,
                        id_NhaCungCap = m.id_NhaCungCap,
                        SoLuongNhap = m.SoLuongNhap,
                        NgayNhap = m.NgayNhap,
                        TenNhaCungCap = m.TenNhaCungCap,
                        TenHang = n.TenHang,
                        DonGia = n.DonGia,
                        ThanhTien = n.DonGia * m.SoLuongNhap
                    }
                ).Where(p => (DateTime.Compare((DateTime)p.NgayNhap, tuNgay) >= 0) && (DateTime.Compare((DateTime)p.NgayNhap, denNgay) <= 0)).Distinct();

            return list;
        }
        /// <summary>
        /// Hiển thị nhập kho theo nhà cung cấp
        /// </summary>
        /// <param name="idNCC"></param>
        /// <returns></returns>
        public IQueryable HienThiNhapKhoTheoNCC(String idNCC,DateTime tuNgay, DateTime denNgay)
        {
            var list = context.tbl_Hangs.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_Hang,
                    b => b.id_Hang,
                    (a, b) => new
                    {
                        id_Hang = a.id_Hang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr1 => new
                {
                    id_Hang = gr1.Key,
                    SoLuongNhap = gr1.Sum(xxx => xxx.SoLuong)
                }
                ).Join(
                    context.tbl_HoaDonNhap_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        id_HoaDonNhap = d.id_HoaDonNhap,
                        SoLuongNhap = c.SoLuongNhap
                    }
                ).Join(
                    context.tbl_HoaDonNhaps,
                    f => f.id_HoaDonNhap,
                    g => g.id_HoaDonNhap,
                    (f, g) => new
                    {
                        id_Hang = f.id_Hang,
                        id_HoaDonNhap = f.id_HoaDonNhap,
                        SoLuongNhap = f.SoLuongNhap,
                        NgayNhap = g.NgayNhap
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    h => h.id_Hang,
                    k => k.id_Hang,
                    (h, k) => new
                    {
                        id_Hang = h.id_Hang,
                        id_HoaDonNhap = h.id_HoaDonNhap,
                        id_NhaCungCap = k.id_NhaCungCap,
                        SoLuongNhap = h.SoLuongNhap,
                        NgayNhap = h.NgayNhap
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    i => i.id_NhaCungCap,
                    j => j.id_NhaCungCap,
                    (i, j) => new
                    {
                        id_Hang = i.id_Hang,
                        id_HoaDonNhap = i.id_HoaDonNhap,
                        id_NhaCungCap = i.id_NhaCungCap,
                        SoLuongNhap = i.SoLuongNhap,
                        NgayNhap = i.NgayNhap,
                        TenNhaCungCap = j.TenNhaCungCap
                    }
                ).Join(
                    context.tbl_Hangs,
                    m => m.id_Hang,
                    n => n.id_Hang,
                    (m, n) => new
                    {
                        id_Hang = m.id_Hang,
                        //id_HoaDonNhap = m.id_HoaDonNhap,
                        id_NhaCungCap = m.id_NhaCungCap,
                        SoLuongNhap = m.SoLuongNhap,
                        NgayNhap = m.NgayNhap,
                        TenNhaCungCap = m.TenNhaCungCap,
                        TenHang = n.TenHang,
                        DonGia = n.DonGia,
                        ThanhTien = n.DonGia * m.SoLuongNhap
                    }
                ).Where(p => p.id_NhaCungCap.Equals(idNCC) && (DateTime.Compare((DateTime)p.NgayNhap, tuNgay) >= 0) && (DateTime.Compare((DateTime)p.NgayNhap, denNgay) <= 0)).Distinct();
            return list;
        }


        public IQueryable HienThiHangDaBan(DateTime tuNgay, DateTime denNgay)
        {
            var list = context.tbl_Hangs.Join(
                    context.tbl_HoaDonBan_Hangs,
                    a => a.id_Hang,
                    b => b.id_Hang,
                    (a, b) => new
                    {
                        id_Hang = a.id_Hang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr1 => new
                    {
                        id_Hang = gr1.Key,
                        SoLuongBan = gr1.Sum(xxx => xxx.SoLuong)
                    }
                ).Join(
                    context.tbl_HoaDonBan_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        id_HoaDonBan = d.id_HoaDonBan,
                        SoLuongBan = c.SoLuongBan
                    }
                ).Join(
                    context.tbl_HoaDonBans,
                    f => f.id_HoaDonBan,
                    g => g.id_HoaDonBan,
                    (f, g) => new
                    {
                        id_Hang = f.id_Hang,
                        id_HoaDonBan = f.id_HoaDonBan,
                        SoLuongBan = f.SoLuongBan,
                        NgayBan = g.NgayBan
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    h => h.id_Hang,
                    k => k.id_Hang,
                    (h, k) => new
                    {
                        id_Hang = h.id_Hang,
                        id_HoaDonBan = h.id_HoaDonBan,
                        id_NhaCungCap = k.id_NhaCungCap,
                        SoLuongBan = h.SoLuongBan,
                        NgayBan = h.NgayBan
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    i => i.id_NhaCungCap,
                    j => j.id_NhaCungCap,
                    (i, j) => new
                    {
                        id_Hang = i.id_Hang,
                        id_NhaCungCap = i.id_NhaCungCap,
                        SoLuongBan = i.SoLuongBan,
                        NgayBan = i.NgayBan,
                        TenNhaCungCap = j.TenNhaCungCap
                    }
                ).Join(
                    context.tbl_Hangs,
                    q => q.id_Hang,
                    w => w.id_Hang,
                    (q, w) => new
                    {
                        id_Hang = q.id_Hang,
                        id_NhaCungCap = q.id_NhaCungCap,
                        SoLuongBan = q.SoLuongBan,
                        NgayBan = q.NgayBan,
                        TenNhaCungCap = q.TenNhaCungCap,
                        TenHang=w.TenHang,
                        DonGia = w.DonGia + w.DonGia*0.05,
                        ThanhTien = q.SoLuongBan * (w.DonGia + w.DonGia * 0.05)
                    }
                ).Where(p => (DateTime.Compare((DateTime)p.NgayBan, tuNgay) >= 0) && (DateTime.Compare((DateTime)p.NgayBan, denNgay) <= 0)).Distinct();

            return list;
        }

        /// <summary>
        /// Hiển thị doanh thu xem theo ngày tháng
        /// </summary>
        /// <param name="tungay"></param>
        /// <param name="denngay"></param>
        /// <returns></returns>
        public IQueryable HienThiDoanhThuTuyChon(DateTime tungay, DateTime denngay)
        {
            var list = context.tbl_HoaDonNhaps.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_HoaDonNhap,
                    b => b.id_HoaDonNhap,
                    (a, b) => new
                    {
                        id_HoaDonNhap = a.id_HoaDonNhap,
                        id_Hang = b.id_Hang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(z => z.id_Hang).Select(gr1 => new
                {
                    id_Hang = gr1.Key,
                    TongSPNhap = gr1.Sum(zz => zz.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        TongSPNhap = c.TongSPNhap,
                        SoLuong = d.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr2 => new
                {
                    id_Hang = gr2.Key,
                    TongSPBan = gr2.Sum(xx => xx.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    g => g.id_Hang,
                    h => h.id_Hang,
                    (g, h) => new
                    {
                        id_Hang = g.id_Hang,
                        TongSPBan = g.TongSPBan,
                        id_HoaDonBan = h.id_HoaDonBan
                    }
                ).Join(
                    context.tbl_HoaDonBans,
                    i => i.id_HoaDonBan,
                    j => j.id_HoaDonBan,
                    (i, j) => new
                    {
                        id_Hang = i.id_Hang,
                        TongSPBan = i.TongSPBan,
                        id_HoaDonBan = i.id_HoaDonBan,
                        NgayBan = j.NgayBan
                    }
                ).Join(
                    context.tbl_HoaDonNhap_Hangs,
                    k => k.id_Hang,
                    l => l.id_Hang,
                    (k, l) => new
                    {
                        id_Hang = k.id_Hang,
                        TongSPBan = k.TongSPBan,
                        id_HoaDonBan = k.id_HoaDonBan,
                        NgayBan = k.NgayBan,
                        id_HoaDonNhap = l.id_HoaDonNhap
                    }
                ).Join(
                    context.tbl_HoaDonNhaps,
                    f => f.id_HoaDonNhap,
                    o => o.id_HoaDonNhap,
                    (f, o) => new
                    {
                        id_Hang = f.id_Hang,
                        TongSPBan = f.TongSPBan,
                        id_HoaDonBan = f.id_HoaDonBan,
                        NgayBan = f.NgayBan,
                        id_HoaDonNhap = f.id_HoaDonNhap,
                        NgayNhap = o.NgayNhap
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    q => q.id_Hang,
                    w => w.id_Hang,
                    (q, w) => new
                    {
                        id_Hang = q.id_Hang,
                        TongSPBan = q.TongSPBan,
                        id_HoaDonBan = q.id_HoaDonBan,
                        NgayBan = q.NgayBan,
                        id_HoaDonNhap = q.id_HoaDonNhap,
                        NgayNhap = q.NgayNhap,
                        id_NhaCungCap = w.id_NhaCungCap
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    r => r.id_NhaCungCap,
                    t => t.id_NhaCungCap,
                    (r, t) => new
                    {
                        id_Hang = r.id_Hang,
                        TongSPBan = r.TongSPBan,
                        id_HoaDonBan = r.id_HoaDonBan,
                        NgayBan = r.NgayBan,
                        id_HoaDonNhap = r.id_HoaDonNhap,
                        NgayNhap = r.NgayNhap,
                        id_NhaCungCap = r.id_NhaCungCap,
                        TenNhaCungCap = t.TenNhaCungCap
                    }
                ).Join(
                    context.tbl_Hangs,
                    y => y.id_Hang,
                    yy => yy.id_Hang,
                    (y, yy) => new
                    {
                        id_Hang = y.id_Hang,
                        SoLuongBan = y.TongSPBan,
                        NgayBan = y.NgayBan,
                        id_NhaCungCap = y.id_NhaCungCap,
                        TenNhaCungCap = y.TenNhaCungCap,
                        TenHang = yy.TenHang,
                        DonGia = yy.DonGia,
                        SoTienMuaHang = yy.DonGia * y.TongSPBan,
                        SoTienBanHang = yy.DonGia * y.TongSPBan * 1.05,
                        Lai = yy.DonGia * y.TongSPBan * 0.05
                    }
                ).Where(p => (DateTime.Compare((DateTime)p.NgayBan, tungay) >= 0) && (DateTime.Compare((DateTime)p.NgayBan, denngay) <= 0)).Distinct().OrderByDescending(u => u.Lai).Take(10);

            return list;
        }

        /// <summary>
        /// Hiển thị doanh thu theo tháng
        /// </summary>
        /// <param name="thang"></param>
        /// <param name="nam"></param>
        /// <returns></returns>
        public IQueryable HienThiDoanhThuTheoThang(String thang, String nam)
        {
            var list = context.tbl_HoaDonNhaps.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_HoaDonNhap,
                    b => b.id_HoaDonNhap,
                    (a, b) => new
                    {
                        id_HoaDonNhap = a.id_HoaDonNhap,
                        id_Hang = b.id_Hang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(z => z.id_Hang).Select(gr1 => new
                {
                    id_Hang = gr1.Key,
                    TongSPNhap = gr1.Sum(zz => zz.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        TongSPNhap = c.TongSPNhap,
                        SoLuong = d.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr2 => new
                {
                    id_Hang = gr2.Key,
                    TongSPBan = gr2.Sum(xx => xx.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    g => g.id_Hang,
                    h => h.id_Hang,
                    (g, h) => new
                    {
                        id_Hang = g.id_Hang,
                        TongSPBan = g.TongSPBan,
                        id_HoaDonBan = h.id_HoaDonBan
                    }
                ).Join(
                    context.tbl_HoaDonBans,
                    i => i.id_HoaDonBan,
                    j => j.id_HoaDonBan,
                    (i, j) => new
                    {
                        id_Hang = i.id_Hang,
                        TongSPBan = i.TongSPBan,
                        id_HoaDonBan = i.id_HoaDonBan,
                        NgayBan = j.NgayBan
                    }
                ).Join(
                    context.tbl_HoaDonNhap_Hangs,
                    k => k.id_Hang,
                    l => l.id_Hang,
                    (k, l) => new
                    {
                        id_Hang = k.id_Hang,
                        TongSPBan = k.TongSPBan,
                        id_HoaDonBan = k.id_HoaDonBan,
                        NgayBan = k.NgayBan,
                        id_HoaDonNhap = l.id_HoaDonNhap
                    }
                ).Join(
                    context.tbl_HoaDonNhaps,
                    f => f.id_HoaDonNhap,
                    o => o.id_HoaDonNhap,
                    (f, o) => new
                    {
                        id_Hang = f.id_Hang,
                        TongSPBan = f.TongSPBan,
                        id_HoaDonBan = f.id_HoaDonBan,
                        NgayBan = f.NgayBan,
                        id_HoaDonNhap = f.id_HoaDonNhap,
                        NgayNhap = o.NgayNhap
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    q => q.id_Hang,
                    w => w.id_Hang,
                    (q, w) => new
                    {
                        id_Hang = q.id_Hang,
                        TongSPBan = q.TongSPBan,
                        id_HoaDonBan = q.id_HoaDonBan,
                        NgayBan = q.NgayBan,
                        id_HoaDonNhap = q.id_HoaDonNhap,
                        NgayNhap = q.NgayNhap,
                        id_NhaCungCap = w.id_NhaCungCap
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    r => r.id_NhaCungCap,
                    t => t.id_NhaCungCap,
                    (r, t) => new
                    {
                        id_Hang = r.id_Hang,
                        TongSPBan = r.TongSPBan,
                        id_HoaDonBan = r.id_HoaDonBan,
                        NgayBan = r.NgayBan,
                        id_HoaDonNhap = r.id_HoaDonNhap,
                        NgayNhap = r.NgayNhap,
                        id_NhaCungCap = r.id_NhaCungCap,
                        TenNhaCungCap = t.TenNhaCungCap
                    }
                ).Join(
                    context.tbl_Hangs,
                    y => y.id_Hang,
                    yy => yy.id_Hang,
                    (y, yy) => new
                    {
                        id_Hang = y.id_Hang,
                        SoLuongBan = y.TongSPBan,
                        NgayBan = y.NgayBan,
                        id_NhaCungCap = y.id_NhaCungCap,
                        TenNhaCungCap = y.TenNhaCungCap,
                        TenHang = yy.TenHang,
                        DonGia = yy.DonGia,
                        SoTienMuaHang = yy.DonGia * y.TongSPBan,
                        SoTienBanHang = yy.DonGia * y.TongSPBan * 1.05,
                        Lai = yy.DonGia * y.TongSPBan * 0.05
                    }
                ).Where(p => (p.NgayBan.Value.Month.ToString().Equals(thang)) && (p.NgayBan.Value.Year.ToString().Equals(nam))).Distinct().OrderByDescending(u => u.Lai).Take(10);

            return list;
        }

        /// <summary>
        /// Hiển thị doanh thu theo quý
        /// </summary>
        /// <param name="quy"></param>
        /// <param name="nam"></param>
        /// <returns></returns>
        public IQueryable HienThiDoanhThuTheoQuy(String t1, String t2 , String t3, String nam)
        {
            
            var list = context.tbl_HoaDonNhaps.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_HoaDonNhap,
                    b => b.id_HoaDonNhap,
                    (a, b) => new
                    {
                        id_HoaDonNhap = a.id_HoaDonNhap,
                        id_Hang = b.id_Hang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(z => z.id_Hang).Select(gr1 => new
                {
                    id_Hang = gr1.Key,
                    TongSPNhap = gr1.Sum(zz => zz.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        TongSPNhap = c.TongSPNhap,
                        SoLuong = d.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr2 => new
                {
                    id_Hang = gr2.Key,
                    TongSPBan = gr2.Sum(xx => xx.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    g => g.id_Hang,
                    h => h.id_Hang,
                    (g, h) => new
                    {
                        id_Hang = g.id_Hang,
                        TongSPBan = g.TongSPBan,
                        id_HoaDonBan = h.id_HoaDonBan
                    }
                ).Join(
                    context.tbl_HoaDonBans,
                    i => i.id_HoaDonBan,
                    j => j.id_HoaDonBan,
                    (i, j) => new
                    {
                        id_Hang = i.id_Hang,
                        TongSPBan = i.TongSPBan,
                        id_HoaDonBan = i.id_HoaDonBan,
                        NgayBan = j.NgayBan
                    }
                ).Join(
                    context.tbl_HoaDonNhap_Hangs,
                    k => k.id_Hang,
                    l => l.id_Hang,
                    (k, l) => new
                    {
                        id_Hang = k.id_Hang,
                        TongSPBan = k.TongSPBan,
                        id_HoaDonBan = k.id_HoaDonBan,
                        NgayBan = k.NgayBan,
                        id_HoaDonNhap = l.id_HoaDonNhap
                    }
                ).Join(
                    context.tbl_HoaDonNhaps,
                    f => f.id_HoaDonNhap,
                    o => o.id_HoaDonNhap,
                    (f, o) => new
                    {
                        id_Hang = f.id_Hang,
                        TongSPBan = f.TongSPBan,
                        id_HoaDonBan = f.id_HoaDonBan,
                        NgayBan = f.NgayBan,
                        id_HoaDonNhap = f.id_HoaDonNhap,
                        NgayNhap = o.NgayNhap
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    q => q.id_Hang,
                    w => w.id_Hang,
                    (q, w) => new
                    {
                        id_Hang = q.id_Hang,
                        TongSPBan = q.TongSPBan,
                        id_HoaDonBan = q.id_HoaDonBan,
                        NgayBan = q.NgayBan,
                        id_HoaDonNhap = q.id_HoaDonNhap,
                        NgayNhap = q.NgayNhap,
                        id_NhaCungCap = w.id_NhaCungCap
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    r => r.id_NhaCungCap,
                    t => t.id_NhaCungCap,
                    (r, t) => new
                    {
                        id_Hang = r.id_Hang,
                        TongSPBan = r.TongSPBan,
                        id_HoaDonBan = r.id_HoaDonBan,
                        NgayBan = r.NgayBan,
                        id_HoaDonNhap = r.id_HoaDonNhap,
                        NgayNhap = r.NgayNhap,
                        id_NhaCungCap = r.id_NhaCungCap,
                        TenNhaCungCap = t.TenNhaCungCap
                    }
                ).Join(
                    context.tbl_Hangs,
                    y => y.id_Hang,
                    yy => yy.id_Hang,
                    (y, yy) => new
                    {
                        id_Hang = y.id_Hang,
                        SoLuongBan = y.TongSPBan,
                        NgayBan = y.NgayBan,
                        id_NhaCungCap = y.id_NhaCungCap,
                        TenNhaCungCap = y.TenNhaCungCap,
                        TenHang = yy.TenHang,
                        DonGia = yy.DonGia,
                        SoTienMuaHang = yy.DonGia * y.TongSPBan,
                        SoTienBanHang = yy.DonGia * y.TongSPBan * 1.05,
                        Lai = yy.DonGia * y.TongSPBan * 0.05
                    }
                ).Where(p => (p.NgayBan.Value.Month == int.Parse(t1.ToString())) || (p.NgayBan.Value.Month == int.Parse(t2.ToString())) || (p.NgayBan.Value.Month == int.Parse(t3.ToString()))).Distinct().OrderByDescending(u => u.Lai).Take(10);

            return list;
        }

        public IQueryable HienThiDoanhThuTheoNam(String nam)
        {
            var list = context.tbl_HoaDonNhaps.Join(
                    context.tbl_HoaDonNhap_Hangs,
                    a => a.id_HoaDonNhap,
                    b => b.id_HoaDonNhap,
                    (a, b) => new
                    {
                        id_HoaDonNhap = a.id_HoaDonNhap,
                        id_Hang = b.id_Hang,
                        SoLuong = b.SoLuong
                    }
                ).GroupBy(z => z.id_Hang).Select(gr1 => new
                {
                    id_Hang = gr1.Key,
                    TongSPNhap = gr1.Sum(zz => zz.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    c => c.id_Hang,
                    d => d.id_Hang,
                    (c, d) => new
                    {
                        id_Hang = c.id_Hang,
                        TongSPNhap = c.TongSPNhap,
                        SoLuong = d.SoLuong
                    }
                ).GroupBy(x => x.id_Hang).Select(gr2 => new
                {
                    id_Hang = gr2.Key,
                    TongSPBan = gr2.Sum(xx => xx.SoLuong)
                }).Join(
                    context.tbl_HoaDonBan_Hangs,
                    g => g.id_Hang,
                    h => h.id_Hang,
                    (g, h) => new
                    {
                        id_Hang = g.id_Hang,
                        TongSPBan = g.TongSPBan,
                        id_HoaDonBan = h.id_HoaDonBan
                    }
                ).Join(
                    context.tbl_HoaDonBans,
                    i => i.id_HoaDonBan,
                    j => j.id_HoaDonBan,
                    (i, j) => new
                    {
                        id_Hang = i.id_Hang,
                        TongSPBan = i.TongSPBan,
                        id_HoaDonBan = i.id_HoaDonBan,
                        NgayBan = j.NgayBan
                    }
                ).Join(
                    context.tbl_HoaDonNhap_Hangs,
                    k => k.id_Hang,
                    l => l.id_Hang,
                    (k, l) => new
                    {
                        id_Hang = k.id_Hang,
                        TongSPBan = k.TongSPBan,
                        id_HoaDonBan = k.id_HoaDonBan,
                        NgayBan = k.NgayBan,
                        id_HoaDonNhap = l.id_HoaDonNhap
                    }
                ).Join(
                    context.tbl_HoaDonNhaps,
                    f => f.id_HoaDonNhap,
                    o => o.id_HoaDonNhap,
                    (f, o) => new
                    {
                        id_Hang = f.id_Hang,
                        TongSPBan = f.TongSPBan,
                        id_HoaDonBan = f.id_HoaDonBan,
                        NgayBan = f.NgayBan,
                        id_HoaDonNhap = f.id_HoaDonNhap,
                        NgayNhap = o.NgayNhap
                    }
                ).Join(
                    context.tbl_NCC_Hangs,
                    q => q.id_Hang,
                    w => w.id_Hang,
                    (q, w) => new
                    {
                        id_Hang = q.id_Hang,
                        TongSPBan = q.TongSPBan,
                        id_HoaDonBan = q.id_HoaDonBan,
                        NgayBan = q.NgayBan,
                        id_HoaDonNhap = q.id_HoaDonNhap,
                        NgayNhap = q.NgayNhap,
                        id_NhaCungCap = w.id_NhaCungCap
                    }
                ).Join(
                    context.tbl_NhaCungCaps,
                    r => r.id_NhaCungCap,
                    t => t.id_NhaCungCap,
                    (r, t) => new
                    {
                        id_Hang = r.id_Hang,
                        TongSPBan = r.TongSPBan,
                        id_HoaDonBan = r.id_HoaDonBan,
                        NgayBan = r.NgayBan,
                        id_HoaDonNhap = r.id_HoaDonNhap,
                        NgayNhap = r.NgayNhap,
                        id_NhaCungCap = r.id_NhaCungCap,
                        TenNhaCungCap = t.TenNhaCungCap
                    }
                ).Join(
                    context.tbl_Hangs,
                    y => y.id_Hang,
                    yy => yy.id_Hang,
                    (y, yy) => new
                    {
                        id_Hang = y.id_Hang,
                        SoLuongBan = y.TongSPBan,
                        NgayBan = y.NgayBan,
                        id_NhaCungCap = y.id_NhaCungCap,
                        TenNhaCungCap = y.TenNhaCungCap,
                        TenHang = yy.TenHang,
                        DonGia = yy.DonGia,
                        SoTienMuaHang = yy.DonGia * y.TongSPBan,
                        SoTienBanHang = yy.DonGia * y.TongSPBan * 1.05,
                        Lai = yy.DonGia * y.TongSPBan * 0.05
                    }
                ).Where(p => p.NgayBan.Value.Year.ToString().Equals(nam)).Distinct().OrderByDescending(u => u.Lai).Take(10);

            return list;
        }
    }
}
